home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’89 / gadlife / source (ugly) / leftover.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-06-14  |  5.0 KB  |  258 lines  |  [TEXT/KAHL]

  1. doCopyBits( mask, mode, dRect, sRect, dest, source )    /* reversed for pascal-ish-ness    */
  2.     BitMap    *source, *dest;
  3.     Rect        *sRect, *dRect;
  4.     int        mode;
  5.     RgnHandle    mask;
  6. {
  7.     int        height;
  8.     
  9.     if( !isMyCopy ) {
  10.         isMyCopy = -1;
  11.         height = getMBarHeight() + 8;
  12.         if( dRect->bottom - dRect->top >= height )
  13.             fixCopy( source, dest, sRect, dRect, mode, mask );
  14.         isMyCopy = 0;
  15.     }
  16. }
  17.  
  18. installMenuTrap() {
  19.     if( !menuTrapsOn ) {
  20.         installWaitTrap();
  21.         installDelayTrap();
  22.         oldSysMenu = NGetTrapAddress( SysMenuTrapNum, ToolTrap );
  23.         NSetTrapAddress( doSysMenu, SysMenuTrapNum, ToolTrap );
  24.         installPatch( CopyBitsTrapNum, ToolTrap, doCopyBits, filterPatchID );
  25.         sysMenuActed = 0;
  26.     }
  27.     ++menuTrapsOn;
  28. }
  29.  
  30. removeMenuTrap() {
  31.     if( sysMenuActed ) {
  32.         removeModalTrap();
  33.         sysMenuActed = 0;
  34.     } else {
  35.         if( menuTrapsOn == 1 ) {
  36.             removePatch( CopyBitsTrapNum, ToolTrap );
  37.             NSetTrapAddress( oldSysMenu, SysMenuTrapNum, ToolTrap );
  38.             removeDelayTrap();
  39.             removeWaitTrap();
  40.         }
  41.         if( menuTrapsOn > 0 ) --menuTrapsOn;
  42.     }
  43. }
  44.  
  45. pascal int doSndPlay( chan, sndHdl, async )
  46.     SndChannelPtr    chan;
  47.     Handle        sndHdl;
  48.     int            async;
  49. {
  50.     return( chan ? SndPlay( chan, sndHdl, async ) : newChannel( sndHdl ) ? noErr : resProblem );
  51. }
  52.  
  53. installSndPatch() {
  54.     installPatch( SndPlayTrapNum, ToolTrap, doSndPlay, replacePatchID );
  55. }
  56.  
  57. removeSndPatch() {
  58.     removePatch( SndPlayTrapNum, ToolTrap );
  59. }
  60.  
  61. pascal doErrSound( which )
  62.     int        which;
  63. {
  64.     if( which ) doSysBeep( 5 );
  65. }
  66.  
  67. doSysBeep( count )
  68.     int    count;
  69. {
  70.     installSndPatch();
  71.     SysBeep( count );
  72.     removeSndPatch();
  73. }    asm {
  74.             move    #patchContinue,d0
  75.             unlk        a6
  76.             rts
  77.     } else {
  78.         err = newChannel( sndHdl ) ? noErr : resProblem;
  79.         asm {
  80.             move    #patchReturn,d0
  81.         }
  82.         return( err );
  83.     }
  84. }
  85.  
  86. installMenuTrap() {
  87.     if( !menuTrapsOn ) {
  88.         installWaitTrap();
  89.         installDelayTrap();
  90.         oldSysMenu = NGetTrapAddress( SysMenuTrapNum, ToolTrap );
  91.         NSetTrapAddress( doSysMenu, SysMenuTrapNum, ToolTrap );
  92.         oldCopyBits = NGetTrapAddress( CopyBitsTrapNum, ToolTrap );
  93.         NSetTrapAddress( doCopyBits, CopyBitsTrapNum, ToolTrap );
  94.         myCopy = 0;
  95.         sysMenuActed = 0;
  96.     }
  97.     ++menuTrapsOn;
  98. }
  99.  
  100. removeMenuTrap() {
  101.     if( sysMenuActed ) {
  102.         removeModalTrap();
  103.         sysMenuActed = 0;
  104.     } else {
  105.         if( menuTrapsOn == 1 ) {
  106.             NSetTrapAddress( oldCopyBits, CopyBitsTrapNum, ToolTrap );
  107.             NSetTrapAddress( oldSysMenu, SysMenuTrapNum, ToolTrap );
  108.             removeDelayTrap();
  109.             removeWaitTrap();
  110.             myCopy = 1;
  111.         }
  112.         if( menuTrapsOn > 0 ) --menuTrapsOn;
  113.     }
  114. }
  115.  
  116. doCopyBits( mask, mode, dRect, sRect, dest, source )    /* reversed for pascal-ish-ness    */
  117.     BitMap    *source, *dest;
  118.     Rect        *sRect, *dRect;
  119.     int        mode;
  120.     RgnHandle    mask;
  121.     {
  122.     int        height;
  123.     
  124.     asm    {
  125.         movem.l    d0-d7/a1-a5,-(sp)
  126.         move.l    CurrentA5,a5
  127.         }
  128.     height = getMBarHeight() + 8;
  129.     if( dRect->bottom - dRect->top >= height )
  130.         fixCopy( source, dest, sRect, dRect, mode, mask );
  131.     asm    {
  132.         movem.l    (sp)+,d0-d7/a1-a5
  133.         unlk        a6
  134.         move.l    oldCopyBits,a0
  135.         jmp        (a0)
  136.         }
  137.     }
  138.     if( !myCopy )
  139.         {
  140.         height = getMBarHeight() + 8;
  141.         if( dRect->bottom - dRect->top >= height )
  142.             fixCopy( source, dest, sRect, dRect, mode, mask );
  143.         }    
  144. main()
  145. {
  146.     asm {
  147.             bra.s        @entry
  148. count:        dc.w        #0
  149. mya5:        dc.l        #0
  150. patch:        dc.l        #0
  151. original:        dc.l        #0
  152. oldpatch:        dc.l        #0
  153. savea0:        dc.l        #0
  154. regsave:        dc.l        #0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0
  155. caller:        dc.l        #0
  156. entry:        move.l    a0,-(sp)
  157.             lea        @savea0,a0
  158.             move.l    (sp)+,(a0)+
  159.             movem.l    d0-d7/a1-a5,(a0)
  160.             lea        @caller,a0
  161.             move.l    (sp)+,(a0)
  162.             move.l    @mya5,a5
  163.             move.l    @patch,a0
  164.             jsr        (a0)
  165.             move.l    @caller,-(sp)
  166.             move.l    @savea0,a0
  167.             tst.w    d0
  168.             beq.s        @replace
  169.             move.l    @original,-(sp)
  170. replace:        movem.l    @regsave,d0-d7/a1-a5
  171.             rts
  172.     }
  173.  
  174. main()
  175. {
  176.     asm {
  177.             bra.s        @entry
  178. count:        dc.w        #0
  179. mya5:        dc.l        #0
  180. patch:        dc.l        #0
  181. original:        dc.l        #0
  182. oldpatch:        dc.l        #0
  183. savea0:        dc.l        #0
  184. regsave:        dc.l        #0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0
  185. caller:        dc.l        #0
  186. entry:        move.l    a0,-(sp)
  187.             lea        @savea0,a0
  188.             move.l    (sp)+,(a0)+
  189.             movem.l    d0-d7/a1-a5,(a0)
  190.             lea        @caller,a0
  191.             move.l    (sp)+,(a0)
  192.             move.l    @mya5,a5
  193.             move.l    @patch,a0
  194.             jsr        (a0)
  195.             move.l    @caller,-(sp)
  196.             movem.l    @regsave,d0-d7/a1-a5
  197.             move.l    @savea0,a0
  198.             rts
  199.     }
  200. }pascal doErrSound( which )
  201.     int        which;
  202.     {
  203.     if( which )
  204.         {
  205.         installSndTrap();
  206.         SysBeep( 1 );
  207.         removeSndTrap();
  208.         }
  209.     }
  210.  
  211. doSysBeep( count )
  212.     int    count;
  213.     {
  214. /*    installSndTrap();
  215. */    installPatch( SndPlayTrapNum, ToolTrap, doSndPlay, replacePatchID );
  216.     SysBeep( count );
  217. /*    removeSndTrap();
  218. */    removePatch( SndPlayTrapNum, ToolTrap );
  219.     }installSndTrap()
  220.     {
  221.     if( !soundTrapOn )
  222.         {
  223.         oldSndPlay = NGetTrapAddress( SndPlayTrapNum, ToolTrap );
  224.         NSetTrapAddress( doSndPlay, SndPlayTrapNum, ToolTrap );
  225.         }
  226.     ++soundTrapOn;
  227.     }
  228.  
  229. removeSndTrap()
  230.     {
  231.     if( soundTrapOn == 1 )
  232.         NSetTrapAddress( oldSndPlay, SndPlayTrapNum, ToolTrap );
  233.     if( soundTrapOn > 0 ) --soundTrapOn;
  234.     }
  235.  
  236. pascal int doSndPlay( chan, sndHdl, async )
  237.     SndChannelPtr    chan;
  238.     Handle        sndHdl;
  239.     int            async;
  240.     {
  241.     int            err;
  242.     asm    {
  243.         movem.l    d0-d7/a1-a5,-(sp)
  244.         move.l    CurrentA5,a5
  245.         }
  246.     if( chan )    asm    {
  247.                 move.l    oldSndPlay,a0
  248.                 movem.l    (sp)+,d0-d7/a1-a5
  249.                 unlk        a6
  250.                 jmp        (a0)
  251.                 }
  252.     err = newChannel( sndHdl ) ? noErr : resProblem;
  253.     asm    {
  254.         movem.l    (sp)+,d0-d7/a1-a5
  255.         }
  256.     return( err );
  257.     }
  258.